package com.example.jianzhioffer;

/**
 * Created by Quincy on 2018/10/6.
 * 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能，
 * 但是string不符合数字要求时返回0)，要求不能使用字符串转换整数的库函数。
 * 数值为0或者字符串不是一个合法的数值则返回0。
 */
public class StrToInt {

    public int StrToInt(String str) {
        //对结果的保存
        int result = 0;
        //对符号的标志   1  0 -1    默认为正
        int symbol = 1;
        //判断输入的值是否为0
        boolean isValid = false;
        //对传入的字符串进行转换成数组
        char[] array = str.toCharArray();
        if (array == null || array.length <= 0) {
            return 0;
        }
        //如果输入第一个位为- 则更改标志为-1
        if (array[0] == '-' ) {
            symbol = -1;
        }
        //对正负号的处理需要过滤掉第一位为正负号   直接对符号进行循环前过滤
        for(int i =  (array[0] == '+' || array[0] == '-') ? 1 : 0; i < array.length; i++){
            //对输入内容进行校验输入值不再0-9范围
            if (!('0' <= array[i] && array[i] <= '9') ){
                isValid = true;
                return 0;
            }
            //对得到结果结果处理   //res=res*10+arr[i]-'0'
            result = result * 10  + array[i] - '0';
            //result = (result << 1) + (result  <<3) + (array[i] & 0xf);
            //对溢出进行判断
            if ((symbol == 1 && result > Integer.MAX_VALUE) || (symbol == -1 && result < Integer.MIN_VALUE)) {
                isValid = true;
                return 0;
            }
        }
        return result * symbol;
    }

}

